<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Conven&ccedil;&otilde;es de Nomenclatura - Zend Framework Manual</title>

    <link href="../css/shCore.css" rel="stylesheet" type="text/css" />
    <link href="../css/shThemeDefault.css" rel="stylesheet" type="text/css" />
    <link href="../css/styles.css" media="all" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Zend Framework</h1>
<h2>Programmer's Reference Guide</h2>
<ul>
    <li><a href="../en/coding-standard.naming-conventions.html">Inglês (English)</a></li>
    <li><a href="../pt-br/coding-standard.naming-conventions.html">Português Brasileiro (Brazilian Portuguese)</a></li>
</ul>
<table width="100%">
    <tr valign="top">
        <td width="85%">
            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="coding-standard.php-file-formatting.html">Formata&ccedil;&atilde;o de Arquivos PHP</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="coding-standard.html">Padr&atilde;o de Codifica&ccedil;&atilde;o do Zend Framework para PHP</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="coding-standard.coding-style.html">Estilo de Codifica&ccedil;&atilde;o</a></div>
                    </td>
                </tr>
            </table>
<hr />
<div id="coding-standard.naming-conventions" class="section"><div class="info"><h1 class="title">Convenções de Nomenclatura</h1></div>
        

        <div class="section" id="coding-standard.naming-conventions.classes"><div class="info"><h1 class="title">Classes</h1></div>
            

            <p class="para">
                O Zend Framework utiliza um padrão de nomes de classes de forma que os nomes das
                classes mapeiam diretamente os diretórios onde estão armazenadas. O diretório raiz
                da biblioteca padrão do Zend Framework é o diretório &quot;Zend/&quot; e o diretório raiz da
                biblioteca de extras é &quot;ZendX/&quot;. Todas as classes do Zend Framework são armazenadas
                hierarquicamente sob tais diretórios.
            </p>

            <p class="para">
                Nomes de classes devem conter somente caracteres alfanuméricos. Números são
                permitidos em nomes de classes mas são desencorajados na maioria dos casos.
                Underscores são permitidos somente no lugar de separador de diretórios. O arquivo
                &quot;<var class="filename">Zend/Db/Table.php</var>&quot;, por exemplo, deve mapear a classe de nome
                &quot;<span class="classname">Zend_Db_Table</span>&quot;.
            </p>

            <p class="para">
                Se um nome de classe é composto de mais de uma palavra, a primeira letra de cada
                nova palavra deve ser maiúscula. Letras maiúsculas em sequência não são permitidas.
                A classe &quot;Zend_PDF&quot;, por exemplo, não é permitida, enquanto
                &quot;<span class="classname">Zend_Pdf</span>&quot; é.
            </p>

            <p class="para">
                Estas convenções definem um mecanismo de pseudonamespace para o Framework. O Zend
                Framework irá adotar o recurso de namespace do <acronym class="acronym">PHP</acronym> assim que ele
                se tornar disponível e prático para nossos desenvolvedores os utilizarem em suas
                aplicações.
            </p>

            <p class="para">
                Exemplos desta convenção de nomenclatura podem ser vistos em nomes de classes nas
                bibliotecas padrão e de extras.
            </p>

            <blockquote class="note"><p><b class="note">Note</b>: 
                <p class="para">
                    <em class="emphasis">Importante</em>: Códigos que devem ser disponibilizados junto às
                    bibliotecas do Zend Framework mas não são parte das bibliotecas padrão ou de
                    extras (por exemplo, código de aplicação ou bibliotecas que não são distribuídas
                    pela Zend) nunca devem iniciar com &quot;Zend_&quot; ou &quot;ZendX_&quot;.
                </p>
            </p></blockquote>
        </div>

        <div class="section" id="coding-standard.naming-conventions.abstracts"><div class="info"><h1 class="title">Classes abstratas</h1></div>
            

            <p class="para">
                Em geral, classes abstratas seguem as mesmas convenções de <a href="coding-standard.naming-conventions.html#coding-standard.naming-conventions.classes" class="link">classes</a>, com uma
                regra adicional: nomes de classes abstratas devem terminar com o termo &quot;Abstract&quot;,
                que não pode ser precedido por um underscore. Por exemplo,
                <span class="classname">Zend_Controller_Plugin_Abstract</span> é considerado um nome
                inválido, mas <span class="classname">Zend_Controller_PluginAbstract</span> ou
                <span class="classname">Zend_Controller_Plugin_PluginAbstract</span> seriam nomes válidos.
            </p>

            <blockquote class="note"><p><b class="note">Note</b>: 
                <p class="para">
                    Esta convenção de codificação é nova na versão 1.9.0 do Zend Framework. Classes
                    de datas anteriores a esta versão podem não seguir esta regra mas serão
                    renomeadas no futuro a fim de obedecê-la.
                </p>

                <p class="para">
                    A razão de tal mudança é o uso de namespace. Como pretendemos que o Zend
                    Framework 2.0 utilize <acronym class="acronym">PHP</acronym> 5.3, utilizaremos namespaces. A
                    maneira mais fácil de automatizar a conversão para namespaces é simplemente
                    converter underscores para o separador de namespace -- mas sob as antigas
                    convenções de nomenclatura isto deixa o nome da classe como somente &quot;Abstract&quot;
                    ou &quot;Interface&quot; -- as quais são palavras-chave reservadas em
                    <acronym class="acronym">PHP</acronym>. Se prefixarmos o nome do (sub)componente ao nome da
                    classe, podemos evitar tais problemas.
                </p>

                <p class="para">
                    Para ilustrar a situação, considere converter a classe
                    <span class="classname">Zend_Controller_Request_Abstract</span> para utilizar
                    namespaces:
                </p>

                <pre class="programlisting brush: php">
namespace Zend\Controller\Request;

abstract class Abstract
{
    // ...
}
</pre>


                <p class="para">
                    Claramente isto não irá funcionar. Sob as novas convenções de nomenclatura,
                    entretanto, isso se tornaria:
                </p>

                <pre class="programlisting brush: php">
namespace Zend\Controller\Request;

abstract class RequestAbstract
{
    // ...
}
</pre>


                <p class="para">
                    Ainda retemos a semântica e a separação de namespace enquanto omitimos os
                    problemas com palavras-chave; ao mesmo tempo, a classe abstrata é melhor
                    descrita.
                </p>
            </p></blockquote>
        </div>

        <div class="section" id="coding-standard.naming-conventions.interfaces"><div class="info"><h1 class="title">Interfaces</h1></div>
            

            <p class="para">
                Em geral, interfaces seguem as mesmas convenções de <a href="coding-standard.naming-conventions.html#coding-standard.naming-conventions.classes" class="link">classes</a>, com uma
                regra adicional: nomes de interface podem opcionalmente terminar com o termo
                &quot;Interface&quot;, que não pode ser precedido por um underscore. Por exemplo,
                <span class="classname">Zend_Controller_Plugin_Interface</span> é considerado um nome
                inválido, mas <span class="classname">Zend_Controller_PluginInterface</span> ou
                <span class="classname">Zend_Controller_Plugin_PluginInterface</span> seriam nomes válidos.
            </p>

            <p class="para">
                Embora esta regra não seja obrigatória, ela é fortemente recomendada, já que provê
                uma boa pista visual aos desenvolvedores sobre quais arquivos contém interfaces em
                vez de classes.
            </p>

            <blockquote class="note"><p><b class="note">Note</b>: 
                <p class="para">
                    Esta convenção de nomenclatura é nova na versão 1.9.0 do Zend Framework. Classes
                    de datas anteriores a esta versão podem não seguir esta regra, mas serão
                    renomeadas no futuro a fim de obedecê-la. Veja <a href="coding-standard.naming-conventions.html#coding-standard.naming-conventions.abstracts" class="link">a seção
                        anterior</a> para informações sobre a razão da mudança.
                </p>
            </p></blockquote>
        </div>

        <div class="section" id="coding-standard.naming-conventions.filenames"><div class="info"><h1 class="title">Nomes de arquivos</h1></div>
            

            <p class="para">
                Para todos os outros arquivos, somente caracteres alfanuméricos, underscores e
                hifens são permitidos. Espaços são estritamente proibidos.
            </p>

            <p class="para">
                Qualquer arquivo que contenha código <acronym class="acronym">PHP</acronym> deve terminar com a
                extensão &quot;<var class="filename">.php</var>&quot;, com a notável exceção de scripts de view. Os
                exemplos a seguir mostram nomes de arquivo aceitáveis para classes do Zend
                Framework:
            </p>

            <pre class="programlisting brush: php">
Zend/Db.php

Zend/Controller/Front.php

Zend/View/Helper/FormRadio.php
</pre>


            <p class="para">
                Nomes de arquivos devem mapear nomes de classes, como descrito acima.
            </p>
        </div>

        <div class="section" id="coding-standard.naming-conventions.functions-and-methods"><div class="info"><h1 class="title">Funções e métodos</h1></div>
            

            <p class="para">
                Nomes de funções devem conter somente caracteres alfanuméricos, não sendo
                underscores permitidos. Números são permitidos mas desencorajados na maioria dos
                casos.
            </p>

            <p class="para">
                Nomes de funções devem sempre começar com letra minúscula e, quando consistir de
                mais de uma palavra, a primeira letra de cada palavra deve ser maiúscula. Esta
                formatação é comumente chamada de &quot;camelCase&quot;.
            </p>

            <p class="para">
                A utilização de verbos é geralmente encorajada, devendo os nomes de funções ser tão
                verbais quanto prático a fim de descrever de forma clara seu propósito e
                comportamento.
            </p>

            <p class="para">
                Estes são exemplos de nomes aceitáveis de funções:
            </p>

            <pre class="programlisting brush: php">
filterInput()

getElementById()

widgetFactory()
</pre>


            <p class="para">
                Para programação orientada a objetos, acessores de variáveis estáticas ou de
                instância devem sempre ser prefixados com &quot;get&quot; ou &quot;set&quot;. Ao implementar padrões de
                design (“design patterns”), como o singleton ou o factory, o nome do método deve
                conter o nome do padrão onde prático a fim de descrever claramente seu
                comportamento.
            </p>

            <p class="para">
                Para métodos de objetos que são declarados com o modificador &quot;private&quot; ou
                &quot;protected&quot;, o primeiro caractere do nome do método deve ser um underscore. Esta é a
                única aplicação aceitável de um underscore em um nome de método. Métodos declarados
                como &quot;public&quot; nunca devem conter um underscore.
            </p>

            <p class="para">
                Funções em escopo global (também chamadas de &quot;funções flutuantes&quot;) são permitidas
                mas desencorajadas na maioria dos casos. Considere encapsular estas funções em uma
                classe estática.
            </p>
        </div>

        <div class="section" id="coding-standard.naming-conventions.variables"><div class="info"><h1 class="title">Variáveis</h1></div>
            

            <p class="para">
                Nomes de variáveis devem conter somente caracteres alfanuméricos, não sendo
                underscores permitidos. Números são permitidos mas são desencorajados na maioria dos
                casos.
            </p>

            <p class="para">
                Para variáveis de instância declaradas com o modificador &quot;private&quot; ou &quot;protected&quot;, o
                primeiro caractere do nome da variável deve ser um underscore. Esta é a única
                aplicação aceitável de um underscore em nome de variável. Variáveis-membras
                declaradas com &quot;public&quot; nunca devem começar com um underscore.
            </p>

            <p class="para">
                Assim como nomes de funções (veja seção 3.3), nomes de variáveis devem sempre
                começar com uma letra minúscula e seguir a convenção &quot;camelCase&quot;.
            </p>

            <p class="para">
                A utilização de verbos é encorajada, ou seja, variáveis devem sempre ser tão verbais
                quanto prático para descrever os dados que o desenvolvedor pretende armazenar nelas.
                Nomes concisos de variáveis como &quot;<var class="varname">$i</var>&quot; e &quot;<var class="varname">$n</var>&quot;
                são desencorajados para todos os contextos de laço, exceto os menores. Se um loop
                contém mais de 20 linhas de código então as variáveis de índice devem ter nomes mais
                descritivos.
            </p>
        </div>

        <div class="section" id="coding-standard.naming-conventions.constants"><div class="info"><h1 class="title">Constantes</h1></div>
            

            <p class="para">
                Constantes devem conter tanto caracteres alfanuméricos quanto underscores. Números
                são permitidos.
            </p>

            <p class="para">
                Todas as letras usadas em um nome de constante devem ser maiúsculas, enquanto todas
                as palavras devem ser separadas por underscores.
            </p>

            <p class="para">
                Por exemplo, <b><tt>EMBED_SUPPRESS_EMBED_EXCEPTION</tt></b> é permitido
                enquanto <b><tt>EMBED_SUPPRESSEMBEDEXCEPTION</tt></b> não.
            </p>

            <p class="para">
                Constantes devem ser definidas como membras de classe com o modificador &quot;const&quot;.
                Definir constantes em escopo global com a função &quot;define&quot; é permitido mas fortemente
                desencorajado.
            </p>
        </div>
    </div>
        <hr />

            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="coding-standard.php-file-formatting.html">Formata&ccedil;&atilde;o de Arquivos PHP</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="coding-standard.html">Padr&atilde;o de Codifica&ccedil;&atilde;o do Zend Framework para PHP</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="coding-standard.coding-style.html">Estilo de Codifica&ccedil;&atilde;o</a></div>
                    </td>
                </tr>
            </table>
</td>
        <td style="font-size: smaller;" width="15%"> <style type="text/css">
#leftbar {
	float: left;
	width: 186px;
	padding: 5px;
	font-size: smaller;
}
ul.toc {
	margin: 0px 5px 5px 5px;
	padding: 0px;
}
ul.toc li {
	font-size: 85%;
	margin: 1px 0 1px 1px;
	padding: 1px 0 1px 11px;
	list-style-type: none;
	background-repeat: no-repeat;
	background-position: center left;
}
ul.toc li.header {
	font-size: 115%;
	padding: 5px 0px 5px 11px;
	border-bottom: 1px solid #cccccc;
	margin-bottom: 5px;
}
ul.toc li.active {
	font-weight: bold;
}
ul.toc li a {
	text-decoration: none;
}
ul.toc li a:hover {
	text-decoration: underline;
}
</style>
 <ul class="toc">
  <li class="header home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="coding-standard.html">Padr&atilde;o de Codifica&ccedil;&atilde;o do Zend Framework para PHP</a></li>
  <li><a href="coding-standard.overview.html">Vis&atilde;o geral</a></li>
  <li><a href="coding-standard.php-file-formatting.html">Formata&ccedil;&atilde;o de Arquivos PHP</a></li>
  <li class="active"><a href="coding-standard.naming-conventions.html">Conven&ccedil;&otilde;es de Nomenclatura</a></li>
  <li><a href="coding-standard.coding-style.html">Estilo de Codifica&ccedil;&atilde;o</a></li>
 </ul>
 </td>
    </tr>
</table>

<script type="text/javascript" src="../js/shCore.js"></script>
<script type="text/javascript" src="../js/shAutoloader.js"></script>
<script type="text/javascript" src="../js/main.js"></script>

</body>
</html>